<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>43-深拷贝-利用递归实现</title>
</head>
<body>
    <script>
        const obj = {
            name:'周思涵',
            love: undefined,
            family:{
                father:'周爸爸'
            },
            hobby:['打游戏','睡觉'],
            sayHi() {
                console.log('我会飞')
            }
        }
        // 封装深拷贝函数 cloneDeep()
        function cloneDeep(oldObj) {
            // 先判断拷贝的是数组还是对象
            const newObj = Array.isArray(oldObj) ? [] : {}
            for(let k in oldObj) {
                // console.log(k)         // 属性
                // console.log(oldObj[k])    // 属性值

                // 把旧对象的值给新对象的属性
                if(typeof oldObj[k] === 'object') {
                    // 如果属性值是引用数据类型,则需要递归再次拷贝
                    newObj[k] = cloneDeep(oldObj[k])
                } else {
                    // 否则属性值是基本数据类型，则直接赋值即可
                    newObj[k] = oldObj[k]
                }
            }
            
            // 返回新对象
            return newObj
        }
        const newObj = cloneDeep(obj)

        // console.log(obj)
        // console.log(newObj)

        newObj.family.father = '周父'
        console.log(obj)
        console.log(newObj)
        
        
        
    </script>
</body>
</html>